// 引入lodash库，用于处理数组和对象
import _ from 'lodash'
// 引入成功响应格式化工具
import { success } from '@/utils/apiResult'
// 引入axios库，用于发送HTTP请求
import axios from 'axios'
// 导出API配置对象
export const api = {
  host: import.meta.env.VITE_HOST
}

// 获取空闲车辆列表的函数
export const fetchErrorCar = params => {
  // 发送GET请求获取空闲车辆数据
  const response = axios
    .get(api.host + '/api/specialCar', {
      params: {
        per_page: params.per_page,
        page: params.page
      }
    })
    .then(res => {
      // 处理成功响应，将数据存储到localStorage
      const errorCarList = res.data.data
      if (errorCarList) {
        localStorage.setItem('errorCarList', JSON.stringify(errorCarList))
      }
      return res.data
    })
    .catch(err => {
      // 处理错误响应，打印错误信息
      if (err.response) {
        console.log(err.response.data.message)
      } else {
        console.log(err)
      }
    })
  // 返回数据（注意：这里的.data访问可能不准确，因为response已经是.then中的res了）
  return response.data
}
// 根据分页参数获取空闲车辆列表的函数
export const getErrorCarList = params => {
  return new Promise(resolve => {
    // 模拟延迟，以模拟网络请求的时间
    setTimeout(() => {
      // 从localStorage获取空闲车辆列表，并根据licensePlate进行过滤
      let errorCarList = getErrorCarListFromStorage()
      if (params.licensePlate !== '') {
        errorCarList = errorCarList.filter(
          item => item.licensePlate.indexOf(params.licensePlate) >= 0
        )
      }
      // 计算总条数，根据分页参数切分数据
      const total = errorCarList.length
      const start = (params.current - 1) * params.size
      const end = start + params.size
      // 构造分页对象并返回成功响应
      const errorCarPage = {
        current: params.current,
        size: params.size,
        total: total,
        records: errorCarList.slice(start, end)
      }
      resolve(success(errorCarPage))
    }, 500)
  })
}

// 根据ID获取单个空闲车辆信息的函数
export const getErrorCar = id => {
  return new Promise(resolve => {
    // 模拟延迟，以模拟网络请求的时间
    setTimeout(() => {
      // 从存储中查找对应ID的车辆，并返回成功响应
      const errorCar = _.find(
        getErrorCarListFromStorage(),
        item => item.id === id
      )
      resolve(success(errorCar))
    }, 500)
  })
}

// 添加空闲车辆的函数
export const addErrorCar = data => {
  return new Promise(resolve => {
    // 模拟延迟，以模拟网络请求的时间
    setTimeout(() => {
      // 发送POST请求添加空闲车辆，并更新localStorage中的列表
      const response = axios
        .post(api.host + '/api/specialCar', data)
        .then(res => {
          // 处理成功响应，更新localStorage
          let errorCarList = getErrorCarListFromStorage()
          errorCarList.push(response.data)
          setErrorCarListToStorage(errorCarList)
        })
        .catch(err => {
          // 处理错误响应，打印错误信息
          if (err.response) {
            console.log(err.response.data.message)
          } else {
            console.log(err)
          }
        })
      // Promise resolve无需值，因为操作已经在then中完成了
      resolve()
    }, 500)
  })
}

// 更新空闲车辆信息的函数
export const updateErrorCar = data => {
  return new Promise(resolve => {
    // 发送PUT请求更新空闲车辆数据，并更新localStorage中的对应项
    const id = data.id
    axios
      .put(api.host + '/api/specialCar/' + id, data)
      .then(res => {
        // 处理成功响应，更新localStorage
        let errorCarList = getErrorCarListFromStorage()
        const index = _.findIndex(errorCarList, item => item.id === data.id)
        if (index >= 0) {
          errorCarList[index] = res.data
          setErrorCarListToStorage(errorCarList)
        }
      })
      .catch(err => {
        // 处理错误响应，打印错误信息
        if (err.response) {
          console.log(err.response.data.message)
        } else {
          console.log(err)
        }
      })
    // Promise resolve无需值，因为操作已经在上面完成了
    resolve()
  })
}

// 删除空闲车辆的函数
export const removeErrorCar = id => {
  return new Promise(resolve => {
    // 发送DELETE请求删除空闲车辆数据，并从localStorage中移除对应项
    axios
      .delete(api.host + '/api/specialCar/' + id)
      .then(res => {
        // 处理成功响应，从localStorage中移除
        let errorCarList = getErrorCarListFromStorage()
        _.remove(errorCarList, item => item.id === id)
        setErrorCarListToStorage(errorCarList)
      })
      .catch(err => {
        // 处理错误响应，打印错误信息
        if (err.response) {
          console.log(err.response.data.message)
        } else {
          console.log(err)
        }
      })
    // Promise resolve无需值，因为操作已经在上面完成了
    resolve()
  })
}

// 从localStorage获取空闲车辆列表的函数
function getErrorCarListFromStorage() {
  // 从localStorage获取数据，若无则初始化为空数组
  let errorCarList = JSON.parse(localStorage.getItem('errorCarList'))
  if (!errorCarList) {
    errorCarList = []
  }
  return errorCarList
}

// 将空闲车辆列表保存到localStorage的函数
function setErrorCarListToStorage(errorCarList) {
  // 将车辆列表转换为字符串并保存到localStorage
  if (errorCarList) {
    localStorage.setItem('errorCarList', JSON.stringify(errorCarList))
  }
}